home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1982-09-14 | 8.9 KB | 229 lines |
- 10 CLEAR ,32000:DEF SEG=&HFA0:BLOAD"OTHELLO.EXE",0
- 20 FOR A=1 TO 9:ON KEY(A) GOSUB 1520:KEY(A) ON:NEXT
- 30 ON KEY(10) GOSUB 2240
- 40 GOTO 200
- 50 DEF SEG=&HFA0
- 60 ROUTINE=0
- 70 CALL ROUTINE (MTBL(0),VTBL(0),MV)
- 80 MV=MV/2:HOLD=MV
- 90 LIN=19-((HOLD\10)*2):CSR=(HOLD MOD 10)*6+6:CHR=SCREEN(LIN,CSR):LIN2=LIN:CSR2=CSR:COLOR 31,0:LOCATE LIN2,CSR2:PRINT CHR$(15);:COLOR 15,0
- 100 FOR J = 1 TO 500: NEXT
- 110 VALID=0:IF MTBL(MV)<>0 THEN RETURN
- 120 B=0
- 130 IF MTBL(MV+DIR(B))<>PLAYER(T) THEN 190
- 140 A=MV+(2*DIR(B))
- 150 IF MTBL(A)=T3 OR MTBL(A)=T0 THEN 190
- 160 IF MTBL(A)<>T THEN A=A+DIR(B):GOTO 150
- 170 VALID=1:C=MV
- 180 IF C<>A THEN MTBL(C)=T:C=C+DIR(B):GOTO 180
- 190 B=B+1:IF B<8 THEN 130 ELSE RETURN
- 200 KEY OFF:WIDTH 80:CLS:DEFINT A-Y:DEFSTR Z
- 210 DIM MTBL(100),VTBL(100),DIR(7),Z(2),PLAYER(2)
- 220 T3=3:T0=0:MV=0:GOSUB 1940
- 230 XLIN=1:XPOS=1:GOSUB 1410:GOSUB 1180:GOSUB 2290:GOSUB 2320
- 240 IF Y THEN GOSUB 950:IF LEGAL=0 THEN CT=T0 ELSE CT=CT+1:IF CT=2 THEN GOTO 1100 ELSE T=PLAYER(T):GOTO 240
- 250 TT=TT+1:Y=Y+1:LOCATE 22,1:PRINT SPC(75):IF TT>44 THEN POKE 163,&H7E
- 260 IF T=2 THEN GOSUB 2320
- 270 GOSUB 690:GOSUB 290:T=PLAYER(T)
- 280 GOSUB 1280:GOTO 240
- 290 ON T GOTO 300,510
- 300 IF MV=12 THEN VTBL(22)=2:VTBL(13)=2
- 310 IF MV=19 THEN VTBL(29)=2:VTBL(18)=2
- 320 IF MV=82 THEN VTBL(83)=2:VTBL(72)=2
- 330 IF MV=89 THEN VTBL(88)=2:VTBL(79)=2
- 340 IF MV<13 OR MV>18 THEN 370
- 350 VTBL(MV+1)=VTBL(MV+1)+1:VTBL(MV+2)=VTBL(MV+2)+100:VTBL(MV-2)=VTBL(MV-2)+100
- 360 VTBL(MV-1)=VTBL(MV-1)+1:GOTO 670
- 370 IF MV=22 THEN VTBL(32)=VTBL(32)+1:VTBL(42)=VTBL(42)+100:GOTO 670
- 380 IF MV=32 THEN VTBL(52)=VTBL(52)+100:VTBL(42)=VTBL(42)+1:VTBL(22)=VTBL(22)+1:GOTO 670
- 390 IF MV=42 THEN VTBL(62)=VTBL(62)+100:VTBL(22)=VTBL(22)+100:VTBL(52)=VTBL(52)+1:VTBL(32)=VTBL(32)+1:GOTO 670
- 400 IF MV=52 THEN VTBL(72)=VTBL(72)+100:VTBL(32)=VTBL(32)+100:VTBL(62)=VTBL(62)+1:VTBL(42)=VTBL(42)+1:GOTO 670
- 410 IF MV=62 THEN VTBL(42)=VTBL(42)+100:VTBL(72)=VTBL(72)+1:VTBL(52)=VTBL(52)+1:GOTO 670
- 420 IF MV=72 THEN VTBL(62)=VTBL(62)+1:VTBL(52)=VTBL(52)+100:GOTO 670
- 430 IF MV=29 THEN VTBL(39)=VTBL(39)+1:VTBL(49)=VTBL(49)+100:GOTO 670
- 440 IF MV=39 THEN VTBL(59)=VTBL(59)+100:VTBL(29)=VTBL(29)+1:VTBL(49)=VTBL(49)+1:GOTO 670
- 450 IF MV=49 THEN VTBL(29)=VTBL(29)+100:VTBL(69)=VTBL(69)+100:VTBL(39)=VTBL(39)+1:VTBL(59)=VTBL(59)+1:GOTO 670
- 460 IF MV=59 THEN VTBL(39)=VTBL(39)+100:VTBL(79)=VTBL(79)+100:VTBL(49)=VTBL(49)+1:VTBL(69)=VTBL(69)+1:GOTO 670
- 470 IF MV=69 THEN VTBL(49)=VTBL(49)+100:VTBL(59)=VTBL(59)+1:VTBL(79)=VTBL(79)+1:GOTO 670
- 480 IF MV=79 THEN VTBL(69)=VTBL(69)+1:VTBL(49)=VTBL(49)+100:GOTO 670
- 490 IF MV<83 OR MV>88 THEN 670
- 500 VTBL(MV+1)=VTBL(MV+1)+1:VTBL(MV+2)=VTBL(MV+2)+100:VTBL(MV-2)=VTBL(MV-2)+100:VTBL(MV-1)=VTBL(MV-1)+1:GOTO 670
- 510 IF MV<13 OR MV>18 THEN 530
- 520 VTBL(MV+1)=VTBL(MV+1)+100:VTBL(MV-1)=VTBL(MV-1)+100:GOTO 670
- 530 IF MV=22 THEN VTBL(32)=VTBL(32)+100:GOTO 670
- 540 IF MV=32 THEN VTBL(42)=VTBL(42)+100:VTBL(22)=VTBL(22)+100:GOTO 670
- 550 IF MV=42 THEN VTBL(52)=VTBL(52)+100:VTBL(32)=VTBL(32)+100:GOTO 670
- 560 IF MV=52 THEN VTBL(62)=VTBL(62)+100:VTBL(42)=VTBL(42)+100:GOTO 670
- 570 IF MV=62 THEN VTBL(72)=VTBL(72)+100:VTBL(52)=VTBL(52)+100:GOTO 670
- 580 IF MV=72 THEN VTBL(62)=VTBL(62)+100:GOTO 670
- 590 IF MV=29 THEN VTBL(39)=VTBL(39)+100:GOTO 670
- 600 IF MV=39 THEN VTBL(29)=VTBL(29)+100:VTBL(49)=VTBL(49)+100:GOTO 670
- 610 IF MV=49 THEN VTBL(39)=VTBL(39)+100:VTBL(59)=VTBL(59)+100:GOTO 670
- 620 IF MV=59 THEN VTBL(49)=VTBL(49)+100:VTBL(69)=VTBL(69)+100:GOTO 670
- 630 IF MV=69 THEN VTBL(59)=VTBL(59)+100:VTBL(79)=VTBL(79)+100:GOTO 670
- 640 IF MV=79 THEN VTBL(69)=VTBL(69)+100:GOTO 670
- 650 IF MV<83 OR MV>88 THEN 670
- 660 VTBL(MV+1)=VTBL(MV+1)+100:VTBL(MV-1)=VTBL(MV-1)+100:GOTO 670
- 670 IF T=2 THEN GOSUB 1620
- 680 VTBL(12)=1:VTBL(19)=1:VTBL(82)=1:VTBL(89)=1:RETURN
- 690 IF T=1 THEN 50
- 700 IF Y>1 THEN LIN=19-((HOLD\10)*2):CSR=(HOLD MOD 10)*6+6:CHR=SCREEN(LIN,CSR):LIN2=LIN:CSR2=CSR:GOTO 720
- 710 CHR=SCREEN(12,36):LIN=13:CSR=36:LIN2=13:CSR2=36:CHR=SCREEN (LIN2,CSR2)
- 720 COLOR 31,0:LOCATE LIN2,CSR2:PRINT CHR$(15);:COLOR 15,0
- 730 GOSUB 930
- 740 IF RIGHT$(Z,1)=CHR$(72) OR Z="8" THEN LIN=LIN-2:GOTO 800
- 750 IF RIGHT$(Z,1)=CHR$(80) OR Z="2" THEN LIN=LIN+2:GOTO 800
- 760 IF RIGHT$(Z,1)=CHR$(75) OR Z="4" THEN CSR=CSR-6:GOTO 800
- 770 IF RIGHT$(Z,1)=CHR$(77) OR Z="6" THEN CSR=CSR+6:GOTO 800
- 780 IF Z=CHR$(13) THEN 870
- 790 GOTO 730
- 800 COLOR 15,0:LOCATE LIN2,CSR2:PRINT CHR$(CHR);
- 810 IF CSR<18 THEN CSR=18
- 820 IF CSR>60 THEN CSR=60
- 830 IF LIN<3 THEN LIN=3
- 840 IF LIN>17 THEN LIN=17
- 850 CHR=SCREEN(LIN,CSR):LOCATE LIN,CSR,0:COLOR 31,0:PRINT CHR$(15);
- 860 LIN2=LIN:CSR2=CSR:COLOR 15,0:GOTO 730
- 870 B=(19-LIN)\2:A=CSR\6-2
- 880 MV=A+1+B*10:GOSUB 110
- 890 IF VALID THEN RETURN
- 900 LOCATE 21,1:PRINT SPC(79):LOCATE 21,20
- 910 PRINT" Invalid Reply. Please Try Again.";
- 920 FOR A=1 TO 3500:NEXT:LOCATE 21,1:PRINT SPC(79):GOTO 730
- 930 DEF SEG:POKE 106,0:IF INKEY$<>"" THEN 930
- 940 Z=INKEY$:IF Z="" THEN 940 ELSE RETURN
- 950 LEGAL=0:LOCATE 23,1:PRINT SPC(79)
- 960 LOCATE 24,1:PRINT SPC(79);:LOCATE 21,30
- 970 A=12
- 980 IF MTBL(A)<>0 THEN 1060
- 990 B=0
- 1000 IF MTBL(A+DIR(B))<>PLAYER(T) THEN 1050
- 1010 C=A+(2*DIR(B))
- 1020 IF MTBL(C)=T3 OR MTBL(C)=T0 THEN 1050
- 1030 IF MTBL(C)=T THEN RETURN
- 1040 C=C+DIR(B):GOTO 1020
- 1050 B=B+1:IF B<8 THEN 1000
- 1060 A=A+1:IF A<90 THEN 980
- 1070 LOCATE 21,30
- 1080 LEGAL=1:PRINT T$(T)" Have No Legal Play."
- 1090 FOR AA=1 TO 3000:NEXT:LOCATE 21,1:PRINT SPC(79):RETURN
- 1100 C(1)=0:C(2)=0:FOR A=12 TO 89:C(MTBL(A))=C(MTBL(A))+1:NEXT
- 1110 LOCATE 21,33:COLOR 15,0
- 1120 IF C(1)=C(2) THEN PRINT"The Game Is A TIE.":GOTO 1140
- 1130 LOCATE 21,35:IF C(2)>C(1) THEN PRINT"You Win." ELSE PRINT"I Win.
- 1140 LOCATE 22,23:PRINT"Would You Like To Play Again? <Y/N>";:COLOR 3,0
- 1150 GOSUB 930:IF Z="Y" OR Z="y" THEN RUN ELSE IF Z<>"N" AND Z<>"n" THEN 1150
- 1160 LOCATE 22,20:PRINT"
- 1170 RUN"MENU
- 1180 CLS:COLOR 3,0
- 1190 PRINT TAB(15)" F R I E N D L Y W A R E O T H E L L O "
- 1200 COLOR 4,0
- 1210 PRINT TAB(15)"KEYTHENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHENCLOSE"
- 1220 PRINT TAB(15)"OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN"
- 1230 FOR A=7 TO 1 STEP -1
- 1240 PRINT TAB(15)"TOTHENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENRANDOMIZE"
- 1250 PRINT TAB(15)"OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN OPEN"
- 1260 NEXT A
- 1270 PRINT TAB(15)"SCREENTHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOAD"
- 1280 LOCATE 1,15:COLOR 15,0
- 1290 FOR A=8 TO 1 STEP -1
- 1300 LOCATE CSRLIN+2,15
- 1310 FOR B=1 TO 8
- 1320 D=A*10+B+1
- 1330 LOCATE ,POS(0)+1:PRINT Z(MTBL(D));
- 1340 NEXT B
- 1350 NEXT A
- 1360 C(1)=0:C(2)=0:FOR A=12 TO 89:C(MTBL(A))=C(MTBL(A))+1:NEXT
- 1370 LOCATE 2,2:PRINT"I Am BLACK":LOCATE 2,67:PRINT"You Are WHITE"
- 1380 LOCATE 3,2:PRINT" And Have":LOCATE 3,70:PRINT" And Have"
- 1390 LOCATE 4,1:PRINT C(1)"Squares ":LOCATE 4,69:PRINT C(2)"Squares "
- 1400 COLOR 3,0:RETURN
- 1410 FOR A=12 TO 89:READ VTBL(A):NEXT
- 1420 Z(0)=" "
- 1430 Z(2)=" CSRLINCSRLINCSRLIN "
- 1440 Z(1)=" LINELINELINE "
- 1450 FOR A=0 TO 100:MTBL(A)=0:NEXT
- 1460 FOR A=1 TO 10
- 1470 MTBL(A)=3:MTBL(A*10)=3:MTBL(A*10-9)=3:MTBL(A+90)=3
- 1480 NEXT
- 1490 MTBL(45)=1:MTBL(46)=2:MTBL(55)=2:MTBL(56)=1:PLAYER(1)=2:PLAYER(2)=1:T=2
- 1500 FOR A=0 TO 7:READ DIR(A):NEXT
- 1510 T$(1)="I":T$(2)="You"
- 1520 RETURN
- 1530 DATA 1,49,5,17,18,6,50,2,0
- 1540 DATA 0,51,257,41,33,34,42,258,52,0
- 1550 DATA 0,7,43,13,25,26,14,44,8,0
- 1560 DATA 0,19,35,27,99,99,28,36,20,0
- 1570 DATA 0,21,37,29,99,99,30,38,22,0
- 1580 DATA 0,9,45,15,31,32,16,46,10,0
- 1590 DATA 0,53,259,47,39,40,48,260,54,0
- 1600 DATA 0,3,55,11,23,20,12,56,4
- 1610 DATA 1,11,10,9,-1,-11,-10,-9
- 1620 IF MTBL(13)=2 AND MTBL(15)=2 THEN VTBL(14)=1
- 1630 IF MTBL(16)=2 AND MTBL(18)=2 THEN VTBL(17)=1
- 1640 IF MTBL(22)=2 AND MTBL(42)=2 THEN VTBL(32)=1
- 1650 IF MTBL(52)=2 AND MTBL(72)=2 THEN VTBL(62)=1
- 1660 IF MTBL(29)=2 AND MTBL(49)=2 THEN VTBL(39)=1
- 1670 IF MTBL(59)=2 AND MTBL(79)=2 THEN VTBL(69)=1
- 1680 IF MTBL(83)=2 AND MTBL(85)=2 THEN VTBL(84)=1
- 1690 IF MTBL(86)=2 AND MTBL(88)=2 THEN VTBL(87)=1
- 1700 IF MV=13 THEN VTBL(15)=2:VTBL(16)=2:VTBL(17)=2:GOTO 1780
- 1710 IF MV=18 THEN VTBL(14)=2:VTBL(15)=2:VTBL(16)=2:GOTO 1780
- 1720 IF MV=83 THEN VTBL(85)=2:VTBL(86)=2:VTBL(87)=2:GOTO 1780
- 1730 IF MV=88 THEN VTBL(84)=2:VTBL(85)=2:VTBL(86)=2:GOTO 1780
- 1740 IF MV=22 THEN VTBL(42)=2:VTBL(52)=2:VTBL(62)=2:GOTO 1780
- 1750 IF MV=72 THEN VTBL(32)=2:VTBL(42)=2:VTBL(52)=2:GOTO 1780
- 1760 IF MV=29 THEN VTBL(49)=2:VTBL(59)=2:VTBL(69)=2:GOTO 1780
- 1770 IF MV=79 THEN VTBL(39)=2:VTBL(49)=2:VTBL(59)=2:GOTO 1780
- 1780 IF MTBL(13)=2 AND MTBL(17)=1 THEN VTBL(15)=2
- 1790 IF MTBL(14)=1 AND MTBL(18)=2 THEN VTBL(16)=2
- 1800 IF MTBL(22)=2 AND MTBL(62)=1 THEN VTBL(42)=2
- 1810 IF MTBL(32)=1 AND MTBL(72)=2 THEN VTBL(52)=2
- 1820 IF MTBL(29)=2 AND MTBL(69)=1 THEN VTBL(49)=2
- 1830 IF MTBL(39)=1 AND MTBL(79)=2 THEN VTBL(59)=2
- 1840 IF MTBL(83)=2 AND MTBL(87)=1 THEN VTBL(85)=2
- 1850 IF MTBL(86)=1 AND MTBL(88)=2 THEN VTBL(84)=2
- 1860 IF MTBL(13)=2 AND MTBL(15)=1 THEN VTBL(17)=2
- 1870 IF MTBL(16)=1 AND MTBL(18)=2 THEN VTBL(14)=2
- 1880 IF MTBL(22)=2 AND MTBL(42)=1 THEN VTBL(62)=2
- 1890 IF MTBL(52)=1 AND MTBL(72)=2 THEN VTBL(32)=2
- 1900 IF MTBL(29)=2 AND MTBL(49)=1 THEN VTBL(69)=2
- 1910 IF MTBL(59)=1 AND MTBL(79)=2 THEN VTBL(39)=2
- 1920 IF MTBL(83)=2 AND MTBL(85)=1 THEN VTBL(87)=2
- 1930 RETURN
- 1940 CLS:COLOR 6,0
- 1950 LOCATE 1,1:PRINT STRING$(80,219)
- 1960 FOR A=2 TO 22:LOCATE A,1:PRINT"CSRLIN":LOCATE A,80:PRINT"CSRLIN":NEXT
- 1970 LOCATE 23,1:PRINT STRING$(80,219);
- 1980 LOCATE 3,20:COLOR 11,0:PRINT"F R I E N D L Y W A R E O T H E L L O
- 1990 COLOR 15,0:LOCATE 8,23:PRINT"Would You Like Instructions? <Y/N>"
- 2000 Z=INKEY$:IF Z="" THEN 2000
- 2010 IF Z="N" OR Z="n" THEN CLS:RETURN
- 2020 IF Z<>"Y" AND Z<>"y" THEN 2000
- 2030 COLOR 7,0:LOCATE 5,20:PRINT "Computer Othello is a game played on an
- 2040 LOCATE 6,20:PRINT "8 by 8 game board. The object of the
- 2050 LOCATE 7,20:PRINT "game is to `capture' more squares than
- 2060 LOCATE 8,20:PRINT "the computer by outflanking his squares
- 2070 LOCATE 9,20:PRINT "with your squares.
- 2090 LOCATE 11,20:PRINT"The squares along the wall are valuable
- 2100 LOCATE 12,20:PRINT"because they can only be `outflanked'
- 2110 LOCATE 13,20:PRINT"in one direction. The corner can not be
- 2120 LOCATE 14,20:PRINT"recaptured after it has been taken. It
- 2130 LOCATE 15,20:PRINT"is the most important square to capture.
- 2150 LOCATE 17,20:PRINT"Some stratagy to use would be to avoid
- 2160 LOCATE 18,20:PRINT"any square adjacent to the wall, while
- 2170 LOCATE 19,20:PRINT"you try to capture wall squares.
- 2220 LOCATE 25,27:COLOR 15,0:PRINT"Strike Any Key To Continue";
- 2230 Z=INKEY$:IF Z="" THEN 2230 ELSE CLS:RETURN
- 2240 KEY(10) OFF:XLIN=CSRLIN:XPOS=POS(0):LOCATE 25,1:PRINT SPC(79);
- 2250 LOCATE 25,21:PRINT"Do You Wish To Leave This Game? <Y/N>";
- 2260 Z=INKEY$:IF Z="" THEN 2260
- 2270 IF Z="y" OR Z="Y" THEN RUN"menu
- 2280 IF Z<>"n" AND Z<>"N" THEN 2260
- 2290 LOCATE 25,1:PRINT SPC(79);:LOCATE 25,23:COLOR 0,7
- 2300 PRINT" Strike <F10> To Leave This Game ";:COLOR 7,0:LOCATE XLIN,XPOS,0
- 2310 KEY(10) ON:RETURN
- 2320 COLOR 6,0:LOCATE 23,22:PRINT"Use Cursor Arrows To Pick Your Move
- 2330 LOCATE 24,22:PRINT"Strike ENTER Key To Make Your Play";
- 2340 COLOR 15,0:RETURN
-